package leetCode;

import java.util.*;

/**
 * 217. 存在重复元素
 * set特性/哈希表

 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ，返回 true ；如果数组中每个元素互不相同，返回 false 。

 示例 1：
 输入：nums = [1,2,3,1]
 输出：true

 示例 2：
 输入：nums = [1,2,3,4]
 输出：false

 示例3：
 输入：nums = [1,1,1,3,3,4,3,2,4,2]
 输出：true

 提示：
 1 <= nums.length <= 105
 -109 <= nums[i] <= 109
 */
public class ContainsDuplicate {
    public static void main(String[] args) {

    }

    //傻瓜循环，51/31
    public boolean containsDuplicate(int[] nums) {
        Map map = new HashMap();
        for (int num : nums) {
            if (map.containsKey(num)) {
                return true;
            }
            map.put(num,0);
        }
        return false;
    }

    //排序，14/22
    public boolean containsDuplicate2(int[] nums) {
        Arrays.sort(nums);
        for (int i = 0;i < nums.length - 1;i++) {
            if (nums[i] == nums[i+1]) {
                return true;
            }
        }
        return false;
    }

    //set特性求解，巧妙，90/87
    public boolean containsDuplicate3(int[] nums) {
        Set set = new HashSet();
        for (int num : nums) {
            if (!set.add(num)) {
                return true;
            }
        }
        return false;
    }
}
